#include <vector>
#include <iostream>
#include <algorithm>
#include <tuple>
#include <string>
#include <typeinfo>
#include <sstream>
using namespace std;

int main()
{
    // 当 cin 读取数据时，它会传递并忽略任何前导白色空格字符（空格、制表符或换行符）。一旦它接触到第一个非空格字符即开始阅读，当它读取到下一个空白字符时，它将停止读取
    int n;
    string s;
    cin >> n; // 这里等价于cin >> n >> s;这里输入2 空格 sdsds和2 换行 sdsds两者效果一样。回车会将其从缓冲区（暂存数据）写入设备，区别在于是一次写入两个还是一次写一个写两次。cout同理，其endl的作用跟cin的回车一样，将其从缓冲区输出到设备。
    // 所以cin的核心在于从缓冲区写入设备前，要有足够的变量来保存缓冲区的数据
    cin >> s;
    cout << n << endl;
    cout << s << endl;

    // 读取以空格划分的一行数据 1 2 3 4和1,2,3,4一样
    vector<int> nums;
    while (cin >> n) // cin只能读取跟n类型一样的数据，不一样就都会中断（标点符号，字符串等等），就跟遇到空格一样
    {
        nums.push_back(n);     // 一旦遇到不是int的输入，就会中断，此时就可从缓冲区写入nums
        if (getchar() == '\n') // 读到换行符就结束输入
        {
            break;
        }
    }

    // 读取以','划分的一行数据
    string s1;
    vector<int> nums1;
    cin >> s1; // 写入缓冲区
    char spl = ',';
    istringstream s2(s1); // 再将缓冲区的变为string stream重新写入
    string temp;
    while (getline(s2, temp, spl)) // getline读取s2字符串输入流到temp中，并以','分割
    {
        nums1.push_back(stoi(temp)); // 将n进制字符串转为十进制
    }
}